home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 2000 July: Mac OS SDK / Dev.CD Jul 00 SDK2.toast / Development Kits / • Obsolete⁄Unsupported / MIDI Management Tools / MIDI Sample Applications / OneDialogƒ / OneDialog.impl.p next >
Encoding:
Text File  |  1993-06-09  |  4.7 KB  |  218 lines  |  [TEXT/MPS ]

  1. { Implementation of OneDialog }
  2.  
  3.  
  4.     TYPE
  5.         TwoIntegers =    RECORD CASE INTEGER OF
  6.                                     1: ( both                : LONGINT );
  7.                                     2: ( first, second    : INTEGER );
  8.                             END;
  9.  
  10.  
  11.     VAR
  12.         StandardScroll    : Handle;        {the old scroll CDEF proc}
  13.         SpecialScroll    : Ptr;            {the new scroll CDEF proc}
  14.  
  15.  
  16.     PROCEDURE DrawLine(aDialog: DialogPtr; itemNo: INTEGER);
  17.         VAR
  18.             itemType    : INTEGER;
  19.             itemHdl        : Handle;
  20.             itemRect    : Rect;
  21.         BEGIN
  22.             GetDItem(TheDialog, itemNo, itemType, itemHdl, itemRect);
  23.             FillRect(itemRect, gray)
  24.         END;
  25.             
  26.  
  27.  
  28.     PROCEDURE SetIHandle(itemNo: INTEGER; hand: Handle);
  29.         VAR
  30.             itemType    : INTEGER;
  31.             itemHdl        : Handle;
  32.             itemRect    : Rect;
  33.         BEGIN
  34.             GetDItem(TheDialog, itemNo, ItemType, ItemHdl, ItemRect);
  35.             ItemHdl := hand;
  36.             SetDItem(TheDialog, itemNo, ItemType, ItemHdl, ItemRect);
  37.         END;
  38.  
  39.  
  40.  
  41.     FUNCTION NewScrollControl(varCode: INTEGER;
  42.                             theControl: ControlHandle;
  43.                             message: INTEGER;
  44.                             param: LONGINT): LONGINT;
  45.         VAR
  46.             moveAmounts    : TwoIntegers;
  47.             delta                : INTEGER;
  48.             value                : INTEGER;
  49.             ticksNow        : LONGINT;
  50.             
  51.         FUNCTION CallOld(varCode: INTEGER;
  52.                             theControl: ControlHandle;
  53.                             message: INTEGER;
  54.                             param: LONGINT;
  55.                             proc: HANDLE): LONGINT;
  56.             INLINE $205F, $2050, $4E90;
  57.             
  58.         BEGIN
  59.             IF message = autoTrack THEN
  60.                 BEGIN
  61.                     moveAmounts.both := GetCRefCon(theControl);
  62.                     CASE param OF
  63.                         inUpButton:        delta := - moveAmounts.first;
  64.                         inPageUp:        delta := - moveAmounts.second;
  65.                         inPageDown:        delta := moveAmounts.second;
  66.                         inDownButton:    delta := moveAmounts.first;
  67.                         OTHERWISE        delta := 0
  68.                     END;
  69.                     value := GetCtlValue(theControl);
  70.                     IF ((delta < 0) AND (value > GetCtlMin(theControl))) OR
  71.                         ((delta > 0) AND (value < GetCtlMax(theControl))) THEN
  72.                              BEGIN
  73.                                  SetCtlValue(theControl, value+delta);
  74.                                 Delay(5, ticksNow)
  75.                             END;
  76.                     NewScrollControl := 0
  77.                 END
  78.             ELSE
  79.                 BEGIN
  80.                     LoadResource(StandardScroll);
  81.                     HLock(StandardScroll);
  82.                     NewScrollControl :=
  83.                         CallOld(varCode, theControl, message, param, StandardScroll);
  84.                     HUnLock(StandardScroll)
  85.                 END
  86.         END;
  87.  
  88.  
  89.     PROCEDURE FixScrollbar(itemNo: INTEGER;
  90.                             arrowAmount,pageAmount: INTEGER);
  91.         VAR
  92.             itemType    : INTEGER;
  93.             itemHdl        : Handle;
  94.             itemRect    : Rect;
  95.             itemCtrl    : ControlHandle;
  96.             refcon        : TwoIntegers;
  97.         BEGIN
  98.             GetDItem(TheDialog, itemNo, ItemType, ItemHdl, ItemRect);
  99.             itemCtrl := ControlHandle(itemHdl);
  100.             
  101.             refcon.first := arrowAmount;
  102.             refcon.second := pageAmount;
  103.             SetCRefCon(itemCtrl, refcon.both);
  104.             
  105.             HLock(itemHdl);
  106.             WITH itemCtrl^^ DO
  107.                 BEGIN
  108.                     StandardScroll := contrlDefProc;
  109.                     SpecialScroll := Ptr(@NewScrollControl);
  110.                     contrlDefProc := @SpecialScroll;
  111.                 END;
  112.             HUnLock(itemHdl);
  113.             SetCtlAction(itemCtrl, ProcPtr(-1));
  114.         END;
  115.  
  116.  
  117.  
  118.     PROCEDURE FixUserLine(itemNo: INTEGER);
  119.         BEGIN
  120.             SetIHandle(itemNo, Handle(@DrawLine));
  121.         END;
  122.         
  123.         
  124.         
  125.     PROCEDURE ActivateItem(itemNo: INTEGER);
  126.         VAR
  127.             itemType    : INTEGER;
  128.             itemHdl        : Handle;
  129.             itemRect    : Rect;
  130.             itemCtrl    : ControlHandle;
  131.         BEGIN
  132.             GetDItem(TheDialog, itemNo, ItemType, ItemHdl, ItemRect);
  133.             itemCtrl := ControlHandle(itemHdl);
  134.             HiliteControl(itemCtrl, 0);
  135.         END;
  136.  
  137.  
  138.  
  139.     PROCEDURE DeactivateItem(itemNo: INTEGER);
  140.         VAR
  141.             itemType    : INTEGER;
  142.             itemHdl        : Handle;
  143.             itemRect    : Rect;
  144.             itemCtrl    : ControlHandle;
  145.         BEGIN
  146.             GetDItem(TheDialog, itemNo, ItemType, ItemHdl, ItemRect);
  147.             itemCtrl := ControlHandle(itemHdl);
  148.             HiliteControl(itemCtrl, 255);
  149.         END;
  150.  
  151.  
  152.  
  153.     PROCEDURE Message(text:Str255; itemNo:INTEGER);
  154.         VAR
  155.             itemType    : INTEGER;
  156.             itemHdl        : Handle;
  157.             itemRect    : Rect;
  158.         BEGIN
  159.             IF TheDialog <> NIL THEN BEGIN
  160.                 GetDItem(TheDialog, itemNo, itemType, itemHdl, itemRect);
  161.                 SetIText(itemHdl, text)
  162.             END;
  163.         END;
  164.  
  165.  
  166.  
  167.     PROCEDURE DetermineValue(VAR variable: INTEGER;
  168.                                                     itemNo: INTEGER);
  169.         VAR
  170.             itemType    : INTEGER;
  171.             itemHdl        : Handle;
  172.             itemRect    : Rect;
  173.             itemCtrl    : ControlHandle;
  174.         BEGIN
  175.             GetDItem(TheDialog, itemNo, itemType, itemHdl, itemRect);
  176.             itemCtrl := ControlHandle(itemHdl);
  177.             variable := GetCtlValue(itemCtrl)
  178.         END;
  179.  
  180.  
  181.  
  182.     PROCEDURE SetValue(value: INTEGER; VAR variable: INTEGER;
  183.                                                     itemNo: INTEGER);
  184.         VAR
  185.             itemType    : INTEGER;
  186.             itemHdl        : Handle;
  187.             itemRect    : Rect;
  188.             itemCtrl    : ControlHandle;
  189.         BEGIN
  190.             GetDItem(TheDialog, itemNo, itemType, itemHdl, itemRect);
  191.             itemCtrl := ControlHandle(itemHdl);
  192.             SetCtlValue(itemCtrl, value);
  193.             variable := value
  194.         END;
  195.  
  196.  
  197.  
  198.     PROCEDURE ChangeState(state:BOOLEAN;
  199.                         VAR variable:BOOLEAN;
  200.                         itemNo:INTEGER);
  201.         VAR
  202.             itemType    : INTEGER;
  203.             itemHdl    : Handle;
  204.             itemRect    : Rect;
  205.             itemCtrl    : ControlHandle;
  206.         BEGIN
  207.             GetDItem(TheDialog, itemNo, itemType, itemHdl, itemRect);
  208.             itemCtrl := ControlHandle(itemHdl);
  209.             
  210.             IF state THEN
  211.                 SetCtlValue(itemCtrl, 1)
  212.             ELSE
  213.                 SetCtlValue(itemCtrl, 0);
  214.                 
  215.             variable := state;
  216.         END;
  217.  
  218.